iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0

函式function

  • 定義:讓SQL陳述式呼叫,接受引數、參數或執行任務後一定會有一個回傳值,且該回傳值只能返回單一資料類型。
  • 用途:執行比較小型的任務,例如取得資料、值格式化、數據處理或計算等
  • 命名:以f_開頭
  • 特性:必須有return陳述式因為函式必須回傳一值(procedure不會使用到return)
  • 自訂函式:
    • 當函式由多個select陳述式組成,且每個陳述式的結尾都是;時可以重新定義分隔符號(如//、$$)在開始到結束兩個陳述式之間遇到分號時不要做為結束標記
    • 加入參數、回傳值
      • 建立函式並定義其會接受一個參數(任何參數以_param結尾)與資料型態
      • 使用關鍵字return讓MYSQL知道回傳值的資料型態
    • 指定函式特性(procedure不需指定)
      • 定義函式的屬性(也就是指定義函式有什特性)
      • 必須要從以下兩組特性中選擇(各一)
        • deterministic或not deterministic
          • 表示在相同引數或相同資料庫狀態下,選擇deterministic函式回傳值會一樣(定性)。選擇not deterministic則函式不一定會回傳相同的值
          • 目的是助於查詢最佳化工具選擇最適合的方法或是至於持續追蹤異動情況
          • 預設值為not deterministic
        • reads sql data、modifes sql data、contains sql或no sql
          • reads sql data表利用select從資料庫讀取資料但不會更新、插入、刪除資料
          • modifes sql data則會更新、插入、刪除資料
          • contains sql表函式中至少有一個select陳述式且該陳述是不會讀取或寫入資料
          • no sql表函式中沒有select陳述式。當函式回傳值節接寫在程式碼的數字就不會查詢資料庫才會使用no sql
          • 預設值為contains sql
    • 定義函式主體步驟
      1.呼叫函式時要執行的程式碼
      2.以begin、end陳述式表式起始、結束
      3.以關鍵字declare宣告變數(變數用於保存資料值,以_var結尾)
      4.加入select陳述式並且以關鍵字into將資料庫取出的值寫入變數
      5.使用return陳述式,回傳宣告的變數回傳給函式呼叫者(必須有return陳述式且資料型態要相同)
      6.end陳述式

程序procedure

  • 定義:以call陳述式呼叫,不一定會有回傳值或是會回傳一個以上的值,程序是一組SQL語句集合,通常是用來執行一組操作的,例如插入、更新或刪除數據,或者多步計算。
  • 用途:執行較複雜事務邏輯或多步驟的動作,例如重複執行的動作
  • 命名:以p_開頭
  • 定義區域變數、使用者變數
    • 區域變數
      • 在程序與函式中定義的變數,宣告時會用declare加上資料型態
      • 只能在程序或式函式執行期間使用
    • 使用者變數
      • 以@作為開頭
      • 單次session存在的整個期間都能用
      • 不須指定資料型態
  • 自訂程序加上邏輯陳述式
    • if陳述式
      • 決策型陳述式
      • 若為true則會值型特定的程式碼
      • end if為uf陳述式的結束標記
      • 若要檢查更多條件可以使用elseif,若不符合第一個elseif就會跳下一個elseif,若是都不符合就會跳到else陳述式
    • case陳述式
      • 一種撰寫複雜條件的陳述式寫法
      • 以case開始,end case結束。當某一條件為true時會執行後跳到end case陳述式
      • 可與when條件式做搭配
    • 迴圈(loop)
      • 重複執行部分程式碼
      • 必須要設定結束條件來避免無限迴圈
      • loop迴圈
        • 以命令loop、end loop標記圈的開始、結束
      • repeat迴圈
        • 語法:repeat until
        • repeat、end repeat表起始與結束標記
      • while迴圈
        • 必須要先滿足while命令的指定條件才會開始執行迴圈
    • 資料列指標cursor
      • 作用:一次只處理一列資料庫
      • 步驟:
        1.宣告cursor
        2.開啟cursor
        3.取得資料列
        4.資料列是否都處裡完(還沒處裡完回到第三步驟)
        5.處裡完資料列則關閉cursor

下一章:專題一 利用檢視表保護薪資資料(上)


上一篇
Day11 建立檢視表、觸發器、事件
下一篇
Day13 專題一 利用檢視表保護薪資資料
系列文
從零開始的MySQL開發旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言